/**
 * 
 */
package No201_300.No231_240.ProductofArrayExceptSelf_238;
/** 
 * @author  作者 E-mail: ttljtw@qq.com
 * @date 创建时间：2017年3月3日 下午7:10:48 
 * @version 1.0 
 * @parameter  
 * @since  
 * @return  
 */
/**
 * @author 李敬
 *
 */
public class Solution {
	
	/*
	 * 除本身之外的数组之积
	 * 
	 * 对于某一个数字，如果我们知道其前面所有数字的乘积，同时也知道后面所有的数乘积，
	 * 那么二者相乘就是我们要的结果，所以我们只要分别创建出这两个数组即可，
	 * 分别从数组的两个方向遍历就可以分别创建出乘积累积数组。
	 * */
    public int[] productExceptSelf(int[] nums) {
        int[] a = new int[nums.length];
        int[] b = new int[nums.length];
		for (int i = nums.length-1; i >= 0; i--) {
			if(i == nums.length-1){
			    b[i] = 1;
			}else{
			    b[i] = b[i+1] * nums[i+1];
			}
		}
		int[] ret = new int[nums.length];
		for(int i = 0;i<nums.length;i++){
		    if(i == 0){
			    a[i] = 1;
			}else{
			    a[i] = a[i-1] * nums[i-1];
			}
		    ret[i] = a[i] * b[i];
		}
		return ret;
    }

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub

	}

}
